package ar.com.larreta.entidades;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.apache.commons.lang.StringUtils;
import org.hibernate.annotations.SQLDelete;
import org.hibernate.annotations.Where;

import ar.com.larreta.utilidades.GeneradorClavesUnicas;


@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@Table(name="persona")
@Where(clause="fechaEliminacion IS NULL")
//Borrado logico
@SQLDelete (sql="UPDATE Persona SET fechaEliminacion=CURRENT_TIMESTAMP WHERE ID=?")
public abstract class Persona extends Entidad {

	private Long id;
	private String nombre;
	private String apellido;
	private TipoDocumento tipoDocumento;
	private String numeroDocumento;
	
	@Id 
	public Long getId() {
		if(id==null){
			GeneradorClavesUnicas clavesUnicas = new GeneradorClavesUnicas();
			id = clavesUnicas.getLastTime();
		}
		return id;
	}
	
	public void setId(Long id) {
		this.id = id;
	}
	
	@Transient
	public String getNombreCompleto(){
		if ((apellido==null) || (nombre==null)) {
			return StringUtils.EMPTY;
		}
		return apellido + ", " + nombre;
	}
	
	@Basic @Column (name="nombre")
	public String getNombre() {
		return nombre;
	}
	
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	@Basic @Column (name="apellido")
	public String getApellido() {
		return apellido;
	}
	
	public void setApellido(String apellido) {
		this.apellido = apellido;
	}
	
	@ManyToOne (fetch=FetchType.LAZY)
	@JoinColumn (name="idTipoDocumento")	
	public TipoDocumento getTipoDocumento() {
		return tipoDocumento;
	}
	
	public void setTipoDocumento(TipoDocumento tipoDocumento) {
		this.tipoDocumento = tipoDocumento;
	}
	
	@Basic @Column (name="numeroDocumento")
	public String getNumeroDocumento() {
		return numeroDocumento;
	}
	
	public void setNumeroDocumento(String numeroDocumento) {
		this.numeroDocumento = numeroDocumento;
	}
	

	
}
